package com.biscuit.page.basicservice.service.api;

import com.biscuit.page.basicservice.model.entities.mongo.BaseEntity;

import java.util.List;

/**
 * @author mazihao
 * @createTime 2024/4/13 13:10
 */
public interface MongoService {

    /**
     * 获取指定集合是否存在
     *
     * @param clazz
     * @return
     */
    <T extends BaseEntity> boolean isExist(Class<T> clazz);

    /**
     * 创建集合
     *
     * @param clazz
     * @param <T>
     */
    <T extends BaseEntity> void create(Class<T> clazz);

    /**
     * 删除集合
     *
     * @param clazz 集合实体类
     * @param <T>   必须是 BaseEntity 的子类
     */
    <T extends BaseEntity> void drop(Class<T> clazz);

    /**
     * 清空指定集合中的数据
     *
     * @param clazz
     * @param <T>
     */
    <T extends BaseEntity> void clear(Class<T> clazz);

    /**
     * 获取指定集合的所有数据
     *
     * @param clazz
     * @param <T>
     * @return
     */
    <T extends BaseEntity> List<T> list(Class<T> clazz);

    /**
     * 向指定集合中插入数据
     *
     * @param data
     * @param <T>
     * @return
     */
    <T extends BaseEntity> T insert(T data);

    /**
     * 向指定集合中批量插入数据
     *
     * @param data
     * @param <T>
     * @return
     */
    <T extends BaseEntity> List<T> insertBatch(List<T> data);

    /**
     * 根据id修改指定集合的数据
     *
     * @param data
     * @param <T>
     * @return
     */
    <T extends BaseEntity> void updateById(T data);

    /**
     * 根据Id获取指定集合的数据
     *
     * @param clazz
     * @param id
     * @param <T>
     * @return
     */
    <T extends BaseEntity> T getById(Class<T> clazz, String id);

    /**
     * 根据Id删除指定集合中的数据
     *
     * @param clazz
     * @param id
     * @param <T>
     */
    <T extends BaseEntity> void deleteById(Class<T> clazz, String id);

    /**
     * 根据Id集合批量删除指定集合中的数据
     *
     * @param clazz
     * @param idList
     * @param <T>
     */
    <T extends BaseEntity> void deleteByIdList(Class<T> clazz, List<String> idList);

}
